package Trab.ES1.Modelos;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 *
 * @author Grupo H
 */

public class Usuario
{
    private String nomePublico;
    private String login;
    private String senha;
    private Classificacao classificacao;
    private List<Receita> receitasEscritas;
    private List<Receita> receitasFavoritas;
    private List<Comentario> comentariosNoPerfil;
    private List<Grupo> gruposPertencentes;
    private List<Grupo> eDonoDe;
    private List<Usuario> amigos;
    
    public Usuario(String login, String senha, String nomePublico)
    {
        this.nomePublico = nomePublico;
        this.login = login;
        this.senha = senha;
        this.classificacao = Classificacao.APRENDIZ;
        this.receitasEscritas = new ArrayList<>();
        this.receitasFavoritas = new ArrayList<>();
        this.comentariosNoPerfil = new ArrayList<>();
        this.gruposPertencentes = new ArrayList<>();
        this.eDonoDe = new ArrayList<>();
        this.amigos = new ArrayList<>();
    }
    
    /**
     * @return the nomePublico
     */
    public String getNomePublico() 
    {
        return this.nomePublico;
    }
    public String getLogin()
    {
        return this.login;
    }
    public List<Usuario> getAmigos()
    {
        return this.amigos;
    }
    public List<Grupo> getGruposNoQualEDono()
    {
        return this.eDonoDe;
    }

    /**
     * @param nomePublico the nomePublico to set
     */
    public void setNomePublico(String nomePublico) 
    {
        this.nomePublico = nomePublico;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) 
    {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha()
    {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) 
    {
        this.senha = senha;
    }

    /**
     * @return the classificacao
     */
    public Classificacao getClassificacao() 
    {
        return classificacao;
    }

    /**
     * @param classificacao the classificacao to set
     */
    public void setClassificacao(Classificacao classificacao) 
    {
        this.classificacao = classificacao;
    }

    /**
     * @return the receitasEscritas
     */
    public List<Receita> getReceitasEscritas() 
    {
        return receitasEscritas;
    }

    /**
     * @return the receitasFavoritas
     */
    public List<Receita> getReceitasFavoritas() 
    {
        return receitasFavoritas;
    }

    /**
     * @return the comentariosNoPerfil
     */
    public List<Comentario> getComentariosNoPerfil() 
    {
        return comentariosNoPerfil;
    }

    /**
     * @return the gruposPertencentes
     */
    public List<Grupo> getGruposPertencentes() 
    {
        return gruposPertencentes;
    }
    
    public Classificacao getRanking()
    {
        return classificacao;
    }
    
    @Override
    public boolean equals(Object o)
    {
        Usuario usuarioSendoComparado = (Usuario) o;
        return this.getNomePublico().equalsIgnoreCase(usuarioSendoComparado.getNomePublico());            
    }

    @Override
    public int hashCode() 
    {
        int hash = 5;
        hash = 59 * hash + Objects.hashCode(this.getNomePublico());
        return hash;
    }

    public String getNomesReceitasEscritas() 
    {
        String resp = "";
        for(Receita r: this.getReceitasEscritas())
            resp += r.getNome()+"\n";
        return resp;
    }
}
